{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Curse of dimensionality"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Based on this article : http://www.edupristine.com/blog/curse-dimensionality"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pylab as pl\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sampling"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This the sampling example of the original article.\n",
    "\n",
    "<img src=\"./curse-of-dimensionality_1.png\" />\n",
    "[Original image](http://content.edupristine.com/images/blogs/curse-of-dimensionality_1.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's say we want to sample a target percentage ($p$) of our points.\n",
    "If our points are in $n$ dimensions, we have to sample $x$ percent of the range along each dimension to\n",
    "achieve overall $p$ sampling rate.\n",
    "\n",
    "$$x^n = p$$\n",
    "\n",
    "So if we want to find $x$ for a given dimension\n",
    "\n",
    "$$x = p^\\frac{1}{n}$$\n",
    "\n",
    "Let's plot this"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# we want to sample 1% of our points\n",
    "p = 0.01\n",
    "n = np.arange(1, 50)\n",
    "\n",
    "x = p**(1.0 / n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7fed0b4fe0d0>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fed0b53acd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pl.title('Percentage of range to sample along each axis\\nto achieve 1% overall sampling rate')\n",
    "pl.plot(n, x)\n",
    "pl.xlabel('dimensionality')\n",
    "pl.ylabel('percentage of range')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Distance"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is the distance example. \n",
    "\n",
    "<img src=\"./curse-of-dimensionality_2.png\" />\n",
    "[Original image](http://content.edupristine.com/images/blogs/curse-of-dimensionality_2.png)\n",
    "\n",
    "(Image linked from the article)\n",
    "\n",
    "Given a square (or a cube or hypercube), we want to find what volume of the hypercube is covered by the biggest possible hypersphere. Since many algorithms rely on euclidean distance to define nearness, this gives an idea of how many points will fall in our sphere if we choose the biggest possible radius. This should be high for our algorithms to work as intended.\n",
    "\n",
    "For example, if you're in 2D and you have points in the ranges [0, 10], [0, 10], you would except that setting a distance threshold of 10 will include most of the points (obviously missing the points in the corner). If we increase the dimensionality, the volume of the \"corners\" will increase proportionally to our sphere's volume.\n",
    "\n",
    "The volume of an hypersphere of dimension n can be [computed recursively](https://en.wikipedia.org/wiki/Volume_of_an_n-ball#Recursions) :\n",
    "\n",
    "$$V_2(R) = \\pi R^2$$\n",
    "\n",
    "$$V_3(R) = \\frac{4}{3} \\pi R^3$$\n",
    "\n",
    "$$V_n(R) = \\frac{2\\pi R^2}{n} V_{n-2}(R)$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# volume of n-spheres of radius R\n",
    "dims = np.arange(15)\n",
    "R = 1.0\n",
    "S_n = [1,\n",
    "       2 * R,\n",
    "       np.pi * R**2,\n",
    "       4.0/3.0 * np.pi * R**3]\n",
    "for n in dims[4:]:\n",
    "    S_n.append((2 * np.pi * R**2 / float(n)) * S_n[n - 2])\n",
    "S_n = np.array(S_n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# volume of hypercubes of edge length 2*R\n",
    "C_n = np.array([(2*R)**n for n in dims])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fed0b2a5790>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fed0b48c3d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pl.figure(figsize=(12, 3))\n",
    "\n",
    "ax1 = pl.subplot(111)\n",
    "ax1.set_title('Volume as a function of dimensionality\\nfor R=%f' % R)\n",
    "ax1.plot(dims, S_n, c='g', label='n-sphere volume')\n",
    "ax2 = ax1.twinx()\n",
    "ax2.plot(dims, C_n, c='b', label='enclosing n-cube volume')\n",
    "h1, l1 = ax1.get_legend_handles_labels()\n",
    "h2, l2 = ax2.get_legend_handles_labels()\n",
    "ax1.legend(h1+h2, l1+l2, loc=(0.0, 0.9), fontsize=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Interestingly, the volume of the n-sphere decreases after a number of dimensions (this depends on its\n",
    "radius). This is explained on [Wikipedia](https://en.wikipedia.org/wiki/Volume_of_an_n-ball#High_dimensions)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7fed0b11ab50>]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fed0b498990>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pl.figure(figsize=(12, 3))\n",
    "\n",
    "ax1 = pl.subplot(111)\n",
    "ax1.set_title('Ratio of n-sphere to n-cube volume\\n for  R=%f' % R)\n",
    "ax1.plot(dims, S_n/C_n)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}